﻿/*
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

Copyright (C) 2005-2009  Cyber Sinh (http://www.luminescence-software.org/)
*/

namespace Luminescence.Xiph
{
   /// <summary>
   /// Type de bloc de métadonnées FLAC.
   /// </summary>
   public enum FlacMetadataBlock : byte
   {
      /// <summary>
      /// This block has information about the whole stream, like sample rate, number of channels, total number of samples, etc. It must be present as the first metadata block in the stream. Other metadata blocks may follow, and ones that the decoder doesn't understand, it will skip.
      /// </summary>
      StreamInfo = 0,
      /// <summary>
      /// This block allows for an arbitrary amount of padding. The contents of a PADDING block have no meaning. This block is useful when it is known that metadata will be edited after encoding; the user can instruct the encoder to reserve a PADDING block of sufficient size so that when metadata is added, it will simply overwrite the padding (which is relatively quick) instead of having to insert it into the right place in the existing file (which would normally require rewriting the entire file).
      /// </summary>
      Padding = 1,
      /// <summary>
      /// This block is for use by third-party applications. The only mandatory field is a 32-bit identifier. This ID is granted upon request to an application by the FLAC maintainers. The remainder is of the block is defined by the registered application. Visit the registration page if you would like to register an ID for your application with FLAC.
      /// </summary>
      Application = 2,
      /// <summary>
      /// This is an optional block for storing seek points. It is possible to seek to any given sample in a FLAC stream without a seek table, but the delay can be unpredictable since the bitrate may vary widely within a stream. By adding seek points to a stream, this delay can be significantly reduced. Each seek point takes 18 bytes, so 1% resolution within a stream adds less than 2k. There can be only one SEEKTABLE in a stream, but the table can have any number of seek points. There is also a special 'placeholder' seekpoint which will be ignored by decoders but which can be used to reserve space for future seek point insertion.
      /// </summary>
      SeekTable = 3,
      /// <summary>
      /// This block is for storing a list of human-readable name/value pairs. Values are encoded using UTF-8. It is an implementation of the Vorbis comment specification (without the framing bit). This is the only officially supported tagging mechanism in FLAC. There may be only one VORBIS_COMMENT block in a stream. In some external documentation, Vorbis comments are called FLAC tags to lessen confusion.
      /// </summary>
      VorbisComment = 4,
      /// <summary>
      /// This block is for storing various information that can be used in a cue sheet. It supports track and index points, compatible with Red Book CD digital audio discs, as well as other CD-DA metadata such as media catalog number and track ISRCs. The CUESHEET block is especially useful for backing up CD-DA discs, but it can be used as a general purpose cueing mechanism for playback.
      /// </summary>
      Cuesheet = 5,
      /// <summary>
      /// This block is for storing pictures associated with the file, most commonly cover art from CDs. There may be more than one PICTURE block in a file. The picture format is similar to the APIC frame in ID3v2. The PICTURE block has a type, MIME type, and UTF-8 description like ID3v2, and supports external linking via URL (though this is discouraged). The differences are that there is no uniqueness constraint on the description field, and the MIME type is mandatory. The FLAC PICTURE block also includes the resolution, color depth, and palette size so that the client can search for a suitable picture without having to scan them all.
      /// </summary>
      Picture = 6
   }

   /// <summary>
   /// Type de codec utilisé.
   /// </summary>
   public enum OggCodec
   {
      /// <summary>
      /// Codec Vorbis
      /// </summary>
      Vorbis = 0,
      /// <summary>
      /// Codec FLAC
      /// </summary>
      FLAC = 1,
      /// <summary>
      /// Codec Speex
      /// </summary>
      Speex = 2
   }

   /// <summary>
   /// Largeur de bande utilisée pour le fichier Speex.
   /// </summary>
   public enum SpeexBand
   {
      /// <summary>
      /// NarrowBand (8 000 Hertz)
      /// </summary>
      NarrowBand = 0,
      /// <summary>
      /// WideBand (16 000 Hertz)
      /// </summary>
      WideBand = 1,
      /// <summary>
      /// UltraWideBand (32 000 Hertz)
      /// </summary>
      UltraWideband = 2
   }

   /// <summary>
   /// Type d'image selon la norme ID3v2 (frame APIC).
   /// </summary>
   public enum ID3PictureType
   {
      /// <summary>
      /// Other
      /// </summary>
      /// <remarks>
      /// 'Others' are reserved and should not be used.
      /// </remarks>
      Other = 0,
      /// <summary>
      /// 32x32 pixels 'file icon' (PNG only)
      /// </summary>
      /// <remarks>
      /// There may only be one of this picture type in a file.
      /// </remarks>
      PNG32PixelsFileIcon = 1,
      /// <summary>
      /// Other file icon
      /// </summary>
      /// <remarks>
      /// There may only be one of this picture type in a file.
      /// </remarks>
      OtherFileIcon = 2,
      /// <summary>
      /// Cover (front)
      /// </summary>
      FrontCover = 3,
      /// <summary>
      /// Cover (back)
      /// </summary>
      BackCover = 4,
      /// <summary>
      /// Leaflet page
      /// </summary>
      LeafletPage = 5,
      /// <summary>
      /// Media (e.g. label side of CD)
      /// </summary>
      Media = 6,
      /// <summary>
      /// Lead artist, lead performer or soloist
      /// </summary>
      LeadArtist = 7,
      /// <summary>
      /// Artist or performer
      /// </summary>
      Artist = 8,
      /// <summary>
      /// Conductor
      /// </summary>
      Conductor = 9,
      /// <summary>
      /// Band or orchestra
      /// </summary>
      Orchestra = 10,
      /// <summary>
      /// Composer
      /// </summary>
      Composer = 11,
      /// <summary>
      /// Lyricist or text writer
      /// </summary>
      Lyricist = 12,
      /// <summary>
      /// Recording location
      /// </summary>
      RecordingLocation = 13,
      /// <summary>
      /// During recording
      /// </summary>
      DuringRecording = 14,
      /// <summary>
      /// During performance
      /// </summary>
      DuringPerformance = 15,
      /// <summary>
      /// Movie or video screen capture
      /// </summary>
      VideoScreenCapture = 16,
      /// <summary>
      /// A bright coloured fish
      /// </summary>
      BrightColouredFish = 17,
      /// <summary>
      /// Illustration
      /// </summary>
      Illustration = 18,
      /// <summary>
      /// Band or artist logotype
      /// </summary>
      ArtistLogo = 19,
      /// <summary>
      /// Publisher or studio logotype
      /// </summary>
      StudioLogo = 20
   }

   /// <summary>
   /// Type de la page Ogg.
   /// </summary>
   public enum OggHeaderType : byte
   {
      /// <summary>
      /// On est au milieu d'un flux binaire, et on commence un nouveau paquet avec cette page
      /// </summary>
      FreshPaquetInContinuedLogicalBitstream = 0,

      /// <summary>
      /// On est au milieu d'un flux binaire, et on continue un paquet de la page précédente
      /// </summary>
      ContinuedPaquetInContinuedLogicalBitstream = 1,

      /// <summary>
      /// On commence un flux binaire, et on démarre avec un nouveau paquet
      /// </summary>
      FreshPaquetInNewLogicalBitstream = 2,

      /// <summary>
      /// On termine un flux binaire, mais on commence cette page avec un nouveau paquet
      /// </summary>
      FreshPaquetInLastLogicalBitstream = 4,

      /// <summary>
      /// On termine un flux binaire en continuant un paquet de la page précédente
      /// </summary>
      ContinuedPaquetInLastLogicalBitstream = 5,

      /// <summary>
      /// On commence et termine un flux binaire : cela se produit quand le flux rentre entièrement dans une seule page
      /// </summary>
      StartAndEndLogicalBitstream = 6
   }
}